/*
 * @(#)XfspWorstPruneSimplifier.java        2004/08/01
 *
 * This file is part of Xfuzzy 3.1, a design environment for fuzzy logic
 * based systems.
 *
 * (c) 2000 IMSE-CNM. The authors may be contacted by the email address:
 *                    xfuzzy-team@imse.cnm.es
 *
 * Xfuzzy is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by
 * the Free Software Foundation.
 *
 * Xfuzzy is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 */

package xfuzzy.xfsp.model.rulebases;

import xfuzzy.lang.KnowledgeBase;
import xfuzzy.lang.RuleSet;

/**
 * <p> <b>Descripci�n:</b> clase de objetos que permiten la simplificaci�n de
 * bases de reglas mediante la eliminaci�n de las n peores reglas, donde se
 * entiende por peor aquella regla que tiene un menorr grado de activaci�n.
 * <p> <b>E-mail</b>: <ADDRESS>joragupra@us.es</ADDRRESS>
 * @author Jorge Agudo Praena
 * @version 1.2
 * @see XfspModel
 * @see XfspPrunning
 * @see XfspNumberedPrunning
 * @see XfspThresholdPrunning
 *
 */
public class XfspWorstPruneSimplifier
    extends XfspNumberedPruning {

  //n�mero de reglas que deber�n ser eliminadas de la base de reglas durante el
  //proceso de simplificaci�n
  private int worst;

  /**
   * <p> <b>Descripci�n:</b> crea un simplificador de bases de reglas de
   * sistemas difusos que elimina las reglas con m�s bajo grado de activaci�n y
   * elimina el resto.
   * @param pattern Patr�n de datos para las entradas de las reglas.
   * @param worst N�mero de reglas que deber�n eliminarse de la base de reglas
   * en el proceso de simplificaci�n.
   *
   */
  public XfspWorstPruneSimplifier(double[][] pattern, int worst) {
    //llama al constructor del padre
    super(pattern);
    //establece el n�mero de reglas que se deben podar de la base de reglas
    this.worst = worst;
  }

  /**
     * <p> <b>Descripci�n:</b> devuelve el �ndice que ocupa la �ltima regla
     * seleccionada por el simplificador dentro de una lista de reglas
     * ordenadas por su grado de activaci�n.
     * @return �ndice ocupado por la �ltima de las reglas de la base de reglas
     * que se conservar� tras la simplificaci�n si se ordenaran las reglas
     * seg�n su grado de activaci�n.
     *
     */
  protected int firstRuleIndex(KnowledgeBase rb) {
    return ((RuleSet) rb).getRules().length - worst;
  }
}
